#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
//bool checkpf(int d)
//{
//	if (d == 0)return false;
//	for (int i = 1; i*i<= d; i++){
//		if (i * i == d){
//			return true;
//		}
//	}
//	return false;
//}
//bool check(int n){
//	int m = 0;
//	double j=0;
//	while (n){
//		m = n%10*pow(10, j)+m;
//	    n /= 10;
//	    if (checkpf(n)&&checkpf(m)){
//		      return true;
//	     }
//		j++;
//	}
//	return false;
//}
//int main(){
//	int a, b;
//	cin >> a >> b;
//	for (int i = a; i <= b; i++){
//		if (check(i)&&checkpf(i)){
//			cout << i << endl;
//		}
//	}
//int n, k, num1=0;
//const int N = 505;
//vector<int>a(N);
//bool pd[N];
//bool  check()
//{
//	int _num = 0;
//	for (int i = 1; i < n - 1; i++) {
//		if (a[i - 1] > a[i] && a[i] < a[i + 1]
//		|| a[i - 1] < a[i] && a[i] > a[i + 1]) {
//			_num++;
//		}
//	}
//	if (_num + 1 == k)return true;
//	else return false;
//}
//void dfs(int num)
//{
//	if (num == n){
//		if (check())
//		{
//			num1++;
//		}
//	}
//	for (int i = 1; i <= n; i++){
//		if (!pd[i]){
//			a[num] = i;
//			pd[i] = true;
//			dfs(num+ 1);
//			pd[i] = false;
//			a[num] = 0;
//		}
//	}
//}
//int main()
//{
//	cin >> n >> k;
//	if (n == 1)cout << 1;
//	else {
//		dfs(0);
//		cout << num1;
//	}
//}
int n, k, num1 = 0;
const int N = 505;
int dp[N][N];
bool pd[N];
int main()
{
	cin >> n >> k;
	dp[1][0] = 1;
	for (int i = 2; i < n; i++)
	{
		dp[i][0] = 2;//1+1
		for (int j = 0; j <=i ; j++)
		{
			dp[i+1][j]+= dp[i][j] * (j + 1);
			dp[i+1][j+1] += dp[i][j] * 2;
			dp[i + 1][j + 1] += dp[i][j] * 2;

		}
	}

	if (n == 1)cout << 0;


}
//char a, b;
//int n;
//string muti(int m)
//{
//	string _ans;
//	int i=0;//4
//	while (m)//4
//	{
//		int ans = m % n;//0//0//1
//		if (ans >= 10) _ans += 'A' + (ans - 10);
//		else   _ans += '0' + ans;//0//0//1
//		m /= n;
//	}
//	reverse(_ans.begin(), _ans.end());
//	return _ans;
//}
//int main()
//{
//	cin >> n;
//	for (int i = 1; i < n; i++){
//		for (int j = 1; j <= i; j++){
//			if (i >= 10) a = 'A' + (i - 10);
//			else a = i + '0';
//			if (j >= 10) b = 'A' + (j - 10);
//			else b= j + '0';
//			string c = muti(i*j);
//			cout << a << "*" << b<<"="<<c<<" ";
//		}
//		cout << endl;
//	}
//}